Advertisement
Double_X

(Obsolete)DoubleX RMVXA Item Triggers Compatibility v1.01a

May 30th, 2015
736
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.38 KB | None | 0 0
  1. #==============================================================================|
  2. # ** Script Info |
  3. #------------------------------------------------------------------------------|
  4. # * Script Name |
  5. # DoubleX RMVXA Item Triggers Compatibility |
  6. #------------------------------------------------------------------------------|
  7. # * Functions |
  8. # Fixes compatibility issues in DoubleX RMVXA Item Triggers |
  9. # Scripts Addressed: |
  10. # 1. Yanfly Engine Ace - Victory Aftermath |
  11. # 2. Yami Engine Symphony - Equipment Learning |
  12. # 3. DoubleX RMVXA Confusion Edit |
  13. # 4. DoubleX RMVXA Dynamic Data |
  14. # 5. Kread-EX's Grathnode Install |
  15. # 6. Mr.Bubble's Tactics Ogre PSP Crafting System |
  16. # 7. Theolized Sideview Battle System |
  17. # 8. Tsukihime's Instance Items |
  18. # 9. Victor Engine - Custom Slip Effect |
  19. #------------------------------------------------------------------------------|
  20. # * Terms Of Use |
  21. # You shall keep this script's Script Info part's contents intact |
  22. # You shalln't claim that this script is written by anyone other than |
  23. # DoubleX or his aliases |
  24. # None of the above applies to DoubleX or his aliases |
  25. #------------------------------------------------------------------------------|
  26. # * Prerequisites |
  27. # Scripts: |
  28. # 1. DoubleX RMVXA Item Triggers |
  29. #------------------------------------------------------------------------------|
  30. # * Instructions |
  31. # 1. Open the script editor and put this script into an open slot between |
  32. # Materials and Main, save to take effect. |
  33. #------------------------------------------------------------------------------|
  34. # * Links |
  35. # Script Usage 101: |
  36. # 1. forums.rpgmakerweb.com/index.php?/topic/32752-rmvxa-script-usage-101/ |
  37. # 2. rpgmakervxace.net/topic/27475-rmvxa-script-usage-101/ |
  38. # This script: |
  39. # 1. http://pastebin.com/Czwe6Uij |
  40. #------------------------------------------------------------------------------|
  41. # * Authors |
  42. # DoubleX |
  43. #------------------------------------------------------------------------------|
  44. # * Changelog |
  45. # v1.01a(GMT 0700 1-7-2015): |
  46. # 1. Addressed compatibility with |
  47. # - Yanfly Engine Ace - Victory Aftermath |
  48. # - Yami Engine Symphony - Equipment Learning |
  49. # - DoubleX RMVXA Confusion Edit |
  50. # - Kread-EX's Grathnode Install |
  51. # - Victor Engine - Custom Slip Effect |
  52. # 2. Fixed compatibility bugs with Theolized Sideview Battle System |
  53. # v1.00b(GMT 1300 5-6-2015): |
  54. # 1. Fixed instance items' item triggers lambdas not cleared nor reset bug |
  55. # v1.00a(GMT 0800 30-5-2015): |
  56. # 1. 1st version of this script finished |
  57. #==============================================================================|
  58.  
  59. ($doublex_rmvxa ||= {})[:Item_Triggers_Compatibility] = "v1.01a"
  60.  
  61. #==============================================================================|
  62. # ** Script Implementations |
  63. # You need not edit this part as it's about how this script works |
  64. #------------------------------------------------------------------------------|
  65. # * Script Support Info: |
  66. # 1. Prerequisites |
  67. # - Decent understanding of how the addressed scripts work |
  68. # 2. Method documentation |
  69. # - The 1st part informs which version rewritten, aliased or created this|
  70. # method |
  71. # - The 2nd part informs whether the method's rewritten, aliased or new |
  72. # - The 3rd part describes what the method does for new methods only |
  73. # - The 4th part describes what the arguments of the method are |
  74. # - The 5th part describes how this method works for new methods only, |
  75. # and describes the parts added or rewritten for rewritten or aliased |
  76. # methods only |
  77. # Example: |
  78. # #----------------------------------------------------------------------------|
  79. # # (Version X+)Rewrite/Alias/New method: def_name |
  80. # # - What this method does |
  81. # #----------------------------------------------------------------------------|
  82. # # *args: What these arguments are |
  83. # def def_name(*args) |
  84. # # How this method works |
  85. # def_name_code |
  86. # # |
  87. # end # def_name |
  88. #------------------------------------------------------------------------------|
  89.  
  90. if $doublex_rmvxa[:Item_Triggers]
  91.  
  92. if $doublex_rmvxa[:Dynamic_Data] || $imported['KRX-GrathnodeInstall'] ||
  93. $imported[:TSBS] || $imported["TH_InstanceItems"]
  94.  
  95. # Stores the object lambda clearance and reset methods
  96. CLEAR_RESET_ITEM_TRIGGER_LAMBDAS = %Q(
  97. def clear_item_triggers_lambdas(obj, copy = true)
  98. #{$imported["BubsTOCrafting"] ? %Q(
  99. if copy && obj.ingredient_list
  100. obj.ingredient_list.each { |i|
  101. clear_item_triggers_lambdas(i) if i.is_a?(RPG::UsableItem)
  102. }
  103. end
  104. ) : %Q()}
  105. obj.item_triggers = {}
  106. end
  107.  
  108. def reset_item_triggers_lambdas(obj, copy = true)
  109. #{$imported["BubsTOCrafting"] ? %Q(
  110. if copy && obj.ingredient_list
  111. obj.ingredient_list.each { |i|
  112. reset_item_triggers_lambdas(i) if i.is_a?(RPG::UsableItem)
  113. }
  114. end
  115. ) : %Q()}
  116. obj.reset_notetags_item_triggers
  117. end
  118. )
  119.  
  120. end # if $doublex_rmvxa[:Dynamic_Data] || $imported['KRX-GrathnodeInstall'] ||
  121. # $imported[:TSBS] || $imported["TH_InstanceItems"]
  122.  
  123. if $doublex_rmvxa[:Dynamic_Data]
  124.  
  125. #------------------------------------------------------------------------------|
  126. # * Edit module: DataManager |
  127. #------------------------------------------------------------------------------|
  128.  
  129. class << DataManager
  130.  
  131. #----------------------------------------------------------------------------|
  132. # Alias method: save_game_without_rescue |
  133. #----------------------------------------------------------------------------|
  134. alias save_game_without_rescue_item_triggers_1 save_game_without_rescue
  135. def save_game_without_rescue(index)
  136. # Added to clear all state triggers lambdas before saving
  137. [$data_skills, $data_items].each { |data|
  138. data.each { |obj| clear_item_triggers_lambdas(obj, false) if obj }
  139. }
  140. #
  141. save_game_without_rescue_item_triggers_1(index)
  142. # Added to restore all state triggers lambdas after saving
  143. [$data_skills, $data_items].each { |data|
  144. data.each { |obj| reset_item_triggers_lambdas(obj, false) if obj }
  145. }
  146. #
  147. end # save_game_without_rescue
  148.  
  149. #----------------------------------------------------------------------------|
  150. # Alias method: extract_save_contents |
  151. #----------------------------------------------------------------------------|
  152. alias extract_save_contents_item_triggers_1 extract_save_contents
  153. def extract_save_contents(contents)
  154. extract_save_contents_item_triggers_1(contents)
  155. # Added to restore all state triggers lambdas after loading
  156. [$data_skills, $data_items].each { |data|
  157. data.each { |obj| reset_item_triggers_lambdas(obj, false) if obj }
  158. }
  159. #
  160. end # extract_save_contents
  161.  
  162. #----------------------------------------------------------------------------|
  163. # New methods |
  164. # - Clears and resets all lambdas contained by the passed object |
  165. #----------------------------------------------------------------------------|
  166. module_eval(CLEAR_RESET_ITEM_TRIGGER_LAMBDAS)
  167.  
  168. end # DataManager
  169.  
  170. #------------------------------------------------------------------------------|
  171. # * Edit class: RPG::UsableItem |
  172. #------------------------------------------------------------------------------|
  173.  
  174. class RPG::UsableItem < RPG::BaseItem
  175.  
  176. #----------------------------------------------------------------------------|
  177. # New public instance variable |
  178. #----------------------------------------------------------------------------|
  179. attr_accessor :item_triggers_string # Stores the notetag values as strings
  180.  
  181. #----------------------------------------------------------------------------|
  182. # Alias method: load_notetags_item_triggers |
  183. #----------------------------------------------------------------------------|
  184. alias load_notetags_item_triggers_compatibility load_notetags_item_triggers
  185. def load_notetags_item_triggers
  186. load_notetags_item_triggers_compatibility
  187. # Added to store all notetag values in the string form as well
  188. @item_triggers_string = {}
  189. it = "DoubleX_RMVXA::Item_Triggers::"
  190. @note.split(/[\r\n]+/).each { |line|
  191. next unless line =~ /<(\w+) item trigger:\s*(\w+)\s*,\s*(\w+)\s*>/
  192. @item_triggers_string[$1.to_sym] ||= []
  193. @item_triggers_string[$1.to_sym].push(
  194. [eval("#{it}#{$2}"), eval("#{it}#{$3}")])
  195. }
  196. #
  197. end # load_notetags_item_triggers
  198.  
  199. #----------------------------------------------------------------------------|
  200. # New method: reset_notetags_item_triggers |
  201. # - Resets all lambdas used by the notetag values of the passed notetag |
  202. #----------------------------------------------------------------------------|
  203. def reset_notetags_item_triggers
  204. # Uses stored strings of notetag values to reset the lambdas
  205. @item_triggers_string.each { |timing, triggers|
  206. @item_triggers[timing] = triggers.collect { |trigger|
  207. eval("-> battler { battler.instance_exec { #{trigger} } }")
  208. }
  209. }
  210. #
  211. end # reset_notetags_item_triggers
  212.  
  213. end # RPG::UsableItem
  214.  
  215. end # if $doublex_rmvxa[:Dynamic_Data]
  216.  
  217. if $imported['KRX-GrathnodeInstall']
  218.  
  219. #------------------------------------------------------------------------------|
  220. # * (v1.01a+)Edit module: DataManager |
  221. #------------------------------------------------------------------------------|
  222.  
  223. class << DataManager
  224.  
  225. #----------------------------------------------------------------------------|
  226. # Alias method: save_game_without_rescue |
  227. #----------------------------------------------------------------------------|
  228. alias save_game_without_rescue_item_triggers_2 save_game_without_rescue
  229. def save_game_without_rescue
  230. # Added to clear the party's last selected skill as well
  231. skill = $game_party.last_selected_skill
  232. clear_item_triggers_lambdas(skill, false) if skill
  233. #
  234. save_game_without_rescue_item_triggers_2
  235. # Added to reset the party's last selected skill as well
  236. reset_item_triggers_lambdas(skill, false) if skill
  237. #
  238. end # clear_ecatb_blocks
  239.  
  240. #----------------------------------------------------------------------------|
  241. # Alias method: extract_save_contents |
  242. #----------------------------------------------------------------------------|
  243. alias extract_save_contents_item_triggers_2 extract_save_contents
  244. def extract_save_contents
  245. extract_save_contents_item_triggers_2
  246. # Added to reset the party's last selected skill as well
  247. return unless skill = $game_party.last_selected_skill
  248. reset_item_triggers_lambdas(skill, false) if skill
  249. #
  250. end # extract_save_contents
  251.  
  252. #----------------------------------------------------------------------------|
  253. # New methods |
  254. # - Clears and resets all lambdas contained by the passed object |
  255. #----------------------------------------------------------------------------|
  256. module_eval(CLEAR_RESET_ITEM_TRIGGER_LAMBDAS)
  257.  
  258. end # DataManager
  259.  
  260. end # $imported['KRX-GrathnodeInstall']
  261.  
  262. if $imported[:TSBS]
  263.  
  264. #------------------------------------------------------------------------------|
  265. # Alias method: copy |
  266. #------------------------------------------------------------------------------|
  267. alias copy_state_triggers copy
  268. def copy(obj)
  269. # Added to clear all lambdas right before using marshal
  270. battler = obj.is_a?(Game_Battler)
  271. item = obj.is_a?(RPG::UsableItem)
  272. if battler
  273. obj.clear_item_triggers
  274. elsif item
  275. clear_item_triggers_lambdas(obj)
  276. end
  277. #
  278. clone = copy_item_triggers(obj)
  279. # Added to reset all lambdas right after using marshal
  280. if battler
  281. $game_temp.copy_item_triggers(obj, clone)
  282. obj.reset_item_triggers
  283. clone.reset_item_triggers
  284. elsif item
  285. reset_item_triggers_lambdas(obj)
  286. reset_item_triggers_lambdas(clone)
  287. end
  288. #
  289. clone
  290. end # copy
  291.  
  292. #------------------------------------------------------------------------------|
  293. # New methods |
  294. # - Clears and resets all lambdas contained by the passed object |
  295. #------------------------------------------------------------------------------|
  296. eval(CLEAR_RESET_ITEM_TRIGGER_LAMBDAS)
  297.  
  298. if $imported["YEA-VictoryAftermath"] || $imported["YES-EquipmentLearning"]
  299.  
  300. #------------------------------------------------------------------------------|
  301. # * (v1.01a+)Edit module: BattleManager |
  302. #------------------------------------------------------------------------------|
  303.  
  304. class << BattleManager
  305.  
  306. #----------------------------------------------------------------------------|
  307. # Alias method: process_victory |
  308. #----------------------------------------------------------------------------|
  309. alias tsbs_process_victory process_victory
  310. def process_victory
  311. # Rewritten to clear all lambdas right before using Marshal
  312. $game_party.all_members.each { |member| member.clear_item_triggers }
  313. $game_troop.members.each { |member| member.clear_item_triggers }
  314. tsbs_process_victory
  315. #
  316. end # process_victory
  317.  
  318. end # BattleManager
  319.  
  320. end # if $imported["YEA-VictoryAftermath"] || $imported["YES-EquipmentLearning"]
  321.  
  322. GAME_TEMP_ITEM_TRIGGERS = %Q(
  323. attr_accessor :item_in_use
  324. #{$imported[:ve_custom_slip_effect] ? "attr_accessor :state_user" : ""}
  325.  
  326. alias initialize_item_triggers initialize
  327. def initialize
  328. initialize_item_triggers
  329. clear_item_triggers
  330. end
  331.  
  332. def clear_item_triggers
  333. @ecatb_item_in_use = {}
  334. #{$imported[:ve_custom_slip_effect] ? "@state_user = {}" : ""}
  335. end
  336. def copy_item_triggers(battler, clone)
  337. [item_in_use
  338. #{$imported[:ve_custom_slip_effect] ? ", @state_user" : ""}].
  339. each { |temp| temp[clone] = temp[battler] if temp[battler] }
  340. end
  341. )
  342.  
  343. #------------------------------------------------------------------------------|
  344. # * (v1.01a+)Edit class: Game_Temp |
  345. #------------------------------------------------------------------------------|
  346.  
  347. class Game_Temp
  348.  
  349. # Temporarily stores battler data for clearing and resetting the lambdas
  350. module_eval(GAME_TEMP_ITEM_TRIGGERS)
  351.  
  352. end # Game_Temp
  353.  
  354. if $imported["DoubleX RMVXA Confusion Edit"]
  355.  
  356. #------------------------------------------------------------------------------|
  357. # * (v1.01a+)Edit class: Game_Action |
  358. #------------------------------------------------------------------------------|
  359.  
  360. class Game_Action
  361.  
  362. #----------------------------------------------------------------------------|
  363. # Rewrite method: evaluate_item_with_target |
  364. #----------------------------------------------------------------------------|
  365. def evaluate_item_with_target(target)
  366. target.result.clear
  367. # Rewritten to temporarily clear all iterator blocks when using Marshal
  368. target.clear_item_triggers
  369. subject.clear_item_triggers
  370. eval_target = Marshal.load( Marshal.dump(target) )
  371. eval_subject = Marshal.load( Marshal.dump(subject) )
  372. reset_item_triggers(target, eval_target, eval_subject)
  373. #
  374. eval_target.make_damage_value(eval_subject, item)
  375. if item.for_opponent?
  376. eval_target.result.hp_damage.to_f / [eval_target.hp, 1].max
  377. else
  378. [-eval_target.result.hp_damage, eval_target.mhp - eval_target.hp].min /
  379. eval_target.mhp.to_f
  380. end
  381. end # evaluate_item_with_target
  382.  
  383. #----------------------------------------------------------------------------|
  384. # New method: reset_item_triggers |
  385. # - |
  386. #----------------------------------------------------------------------------|
  387. def reset_item_triggers(target, eval_target, eval_subject)
  388. #
  389. $game_temp.copy_item_triggers(subject, eval_subject)
  390. $game_temp.copy_item_triggers(target, eval_target)
  391. [target, subject, eval_target, eval_subject].each { |battler|
  392. battler.reset_item_triggers
  393. }
  394. #
  395. end # reset_item_triggers
  396.  
  397. end # Game_Action
  398.  
  399. end # if $imported["DoubleX RMVXA Confusion Edit"]
  400.  
  401. GAME_BATTLER_ITEM_TRIGGERS = %Q(
  402.  
  403. alias tsbs_on_battle_end on_battle_end
  404. def on_battle_end
  405. tsbs_on_battle_end
  406. clear_item_triggers
  407. end
  408.  
  409. def clear_item_triggers
  410. $game_temp.item_in_use[self] = @item_in_use
  411. @item_in_use = nil
  412. #{$imported[:ve_custom_slip_effect] ? "
  413. $game_temp.state_user[self] = @state_user
  414. @state_user = {}" : ""}
  415. end
  416.  
  417. def reset_item_triggers
  418. @item_in_use = $game_temp.item_in_use[self]
  419. $game_temp.item_in_use.delete(self)
  420. #{$imported[:ve_custom_slip_effect] ? "
  421. @state_user = $game_temp.state_user[self] || {}
  422. $game_temp.state_user.delete(self)" : ""}
  423. end
  424. )
  425.  
  426. #------------------------------------------------------------------------------|
  427. # * (v1.01a+)Edit class: Game_Battler |
  428. #------------------------------------------------------------------------------|
  429.  
  430. class Game_Battler < Game_BattlerBase
  431.  
  432. # Temporarily stores battler data for clearing and resetting the lambdas
  433. module_eval(GAME_BATTLER_ITEM_TRIGGERS)
  434.  
  435. end # Game_Battler
  436.  
  437. end # $imported[:TSBS]
  438.  
  439. if $imported["TH_InstanceItems"]
  440.  
  441. #------------------------------------------------------------------------------|
  442. # * (v1.00b+)Edit module: DataManager |
  443. #------------------------------------------------------------------------------|
  444.  
  445. class << DataManager
  446.  
  447. #----------------------------------------------------------------------------|
  448. # Alias method: save_game_without_rescue |
  449. #----------------------------------------------------------------------------|
  450. alias save_game_without_rescue_item_triggers_4 save_game_without_rescue
  451. def save_game_without_rescue
  452. # Added to clear and reset all item triggers lambda before and after saving
  453. [InstanceManager.weapons, InstanceManager.armors,
  454. InstanceManager.items].each { |data|
  455. data.each_value { |obj| clear_item_triggers_lambdas(obj) if obj }
  456. }
  457. $game_party.clear_item_triggers_lambdas
  458. save_game_without_rescue_item_triggers_4
  459. [InstanceManager.weapons, InstanceManager.armors,
  460. InstanceManager.items].each { |data|
  461. data.each_value { |obj| reset_item_triggers_lambdas(obj) if obj }
  462. }
  463. $game_party.reset_item_triggers_lambdas
  464. #
  465. end # save_game_without_rescue
  466.  
  467. #----------------------------------------------------------------------------|
  468. # Alias method: extract_save_contents |
  469. #----------------------------------------------------------------------------|
  470. alias extract_save_contents_item_triggers_4 extract_save_contents
  471. def extract_save_contents(contents)
  472. extract_save_contents_item_triggers_4(contents)
  473. # Added to restore all item triggers lambdas after loading
  474. [InstanceManager.weapons, InstanceManager.armors,
  475. InstanceManager.items].each { |data|
  476. data.each_value { |obj| reset_item_triggers_lambdas(obj) if obj }
  477. }
  478. $game_party.reset_item_triggers_lambdas
  479. #
  480. end # extract_save_contents
  481.  
  482. #----------------------------------------------------------------------------|
  483. # New methods |
  484. # - Clears and resets all lambdas contained by the passed object |
  485. #----------------------------------------------------------------------------|
  486. module_eval(CLEAR_RESET_ITEM_TRIGGER_LAMBDAS)
  487.  
  488. end # DataManager
  489.  
  490. #------------------------------------------------------------------------------|
  491. # * Edit module: InstanceManager |
  492. #------------------------------------------------------------------------------|
  493.  
  494. class << InstanceManager
  495.  
  496. #----------------------------------------------------------------------------|
  497. # Alias method: make_full_copy |
  498. #----------------------------------------------------------------------------|
  499. alias make_full_copy_item_triggers make_full_copy
  500. def make_full_copy(obj)
  501. # Added to clear all lambdas right before using marshal
  502. item = obj.is_a?(RPG::UsableItem)
  503. clear_item_triggers_lambdas(obj) if item
  504. #
  505. clone = make_full_copy_item_triggers(obj)
  506. # Added to reset all lambdas right after using marshal
  507. if item
  508. reset_item_triggers_lambdas(obj)
  509. reset_item_triggers_lambdas(clone)
  510. end
  511. #
  512. clone
  513. end # make_full_copy
  514.  
  515. #----------------------------------------------------------------------------|
  516. # New methods |
  517. # - Clears and resets all lambdas contained by the passed object |
  518. #----------------------------------------------------------------------------|
  519. module_eval(CLEAR_RESET_ITEM_TRIGGER_LAMBDAS)
  520.  
  521. end # InstanceManager
  522.  
  523. #------------------------------------------------------------------------------|
  524. # * (v1.00b+)Edit class: Game_Party |
  525. #------------------------------------------------------------------------------|
  526.  
  527. class Game_Party < Game_Unit
  528.  
  529. #----------------------------------------------------------------------------|
  530. # New method: clear_item_triggers_lambdas |
  531. # - Clears all stored lambdas as notetag values of all instance items |
  532. #----------------------------------------------------------------------------|
  533. def clear_item_triggers_lambdas
  534. [@item_list, @weapon_list, @armor_list].each { |data|
  535. data.each { |obj| clear_item_triggers_lambdas(obj) if obj }
  536. }
  537. end # clear_item_triggers_lambdas
  538.  
  539. #----------------------------------------------------------------------------|
  540. # New method: reset_item_triggers_lambdas |
  541. # - Resets all stored lambdas as notetag values of all instance items |
  542. #----------------------------------------------------------------------------|
  543. def reset_item_triggers_lambdas
  544. [@item_list, @weapon_list, @armor_list].each { |data|
  545. data.each { |obj| reset_item_triggers_lambdas(obj) if obj }
  546. }
  547. end # reset_item_triggers_lambdas
  548.  
  549. #----------------------------------------------------------------------------|
  550. # New methods |
  551. # - Clears and resets all lambdas contained by the passed object |
  552. #----------------------------------------------------------------------------|
  553. module_eval(CLEAR_RESET_ITEM_TRIGGER_LAMBDAS)
  554.  
  555. end # Game_Party
  556.  
  557. end # if $imported["TH_InstanceItems"]
  558.  
  559. #------------------------------------------------------------------------------|
  560.  
  561. else
  562.  
  563. # Informs users that they didn't place Item Triggers above this script
  564. msgbox("To use DoubleX RMVXA Item Triggers Compatibility, " +
  565. "put it below:\n DoubleX RMVXA Item Triggers\n but above Main")
  566.  
  567. end # if $doublex_rmvxa[:Item_Triggers]
  568.  
  569. #==============================================================================|
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement