Advertisement
QuasiXi

Quasi Skill Equip

Sep 3rd, 2014
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.23 KB | None | 0 0
  1. #==============================================================================
  2. #** Quasi Skill Equip v 1.1
  3. #==============================================================================
  4. # Allows players to equip skills
  5. # - Player needs to know the skills to be able to equip them!
  6. # When skills are equipped, the skills skill types aren't!
  7. #==============================================================================
  8. # Instructions:
  9. # Very simple to use, mostly plug and play.
  10. #
  11. # If used with Quasi Skill Type Equip, place this BELOW it.
  12. #------------------------------------------------------------------------------
  13. # * Note Tag
  14. #------------------------------------------------------------------------------
  15. # <skill_slots: #>
  16. # Can be placed in actors note box, or weapons/armor. Default is 0
  17. #
  18. # If an actor has 2 skill slots, and equips a weapon with 2 more slots. You
  19. # will be able to equip 4 skills. If you unequip the weapon, the last
  20. # 2 skills equipped, will be unequipped.
  21. #------------------------------------------------------------------------------
  22. # * Log
  23. #------------------------------------------------------------------------------
  24. # v 1.1 9/4/14
  25. # - Fixed a bug that caused game to freeze
  26. #-----------------------------------------------------------------------------
  27. module Quasi
  28. module SkillEquip
  29. NAMESKILL = "Skill Equip"
  30. # What to show in the help window.
  31. HELP = "Skills Equiped" # shows "Skills Equiped: total/max"
  32. end
  33. end
  34. #==============================================================================#
  35. # By Quasi (http://quasixi.wordpress.com/)
  36. # - 9/1/14
  37. #==============================================================================#
  38. # ** Stop! Do not edit anything below, unless you know what you **
  39. # ** are doing! **
  40. #==============================================================================#
  41. $imported = {} if $imported.nil?
  42. $imported["Quasi_SkillEquip"] = 1.0
  43.  
  44.  
  45. if $imported["Quasi_PassiveEquip"]
  46. msgbox "[Quasi Passive Equip] needs update!" if $imported["Quasi_PassiveEquip"] < 2
  47. end
  48. if $imported["Quasi_STypeEquip"]
  49. msgbox "[Quasi Skill TypeEquip] needs update!" if $imported["Quasi_STypeEquip"] < 2
  50. end
  51. #==============================================================================
  52. # ** Game_BattlerBase
  53. #------------------------------------------------------------------------------
  54. # This base class handles battlers. It mainly contains methods for calculating
  55. # parameters. It is used as a super class of the Game_Battler class.
  56. #==============================================================================
  57.  
  58. class Game_BattlerBase
  59. alias qseinit initialize
  60. attr_accessor :equipped_skills
  61. #--------------------------------------------------------------------------
  62. # * Object Initialization
  63. # ** ALIAS **
  64. #--------------------------------------------------------------------------
  65. def initialize
  66. qseinit
  67. @equipped_skills = []
  68. end
  69. end
  70.  
  71. #==============================================================================
  72. # ** Game_Actor
  73. #------------------------------------------------------------------------------
  74. # This class handles actors. It is used within the Game_Actors class
  75. # ($game_actors) and is also referenced from the Game_Party class ($game_party).
  76. #==============================================================================
  77.  
  78. class Game_Actor < Game_Battler
  79. alias qsece change_equip
  80. #--------------------------------------------------------------------------
  81. # * Change Equipment
  82. # slot_id: Equipment slot ID
  83. # item: Weapon/armor (remove equipment if nil)
  84. # ** ALIAS **
  85. #--------------------------------------------------------------------------
  86. def change_equip(slot_id, item)
  87. qsece(slot_id, item)
  88. check_skill_slots
  89. end
  90.  
  91. def skill_slots
  92. sslots = actor.skill_slots
  93. @equips.each {|e| next if e.object.nil? ; sslots += e.object.skill_slots}
  94. sslots
  95. end
  96.  
  97. def check_skill_slots
  98. if equipped_skills.size > skill_slots
  99. equipped_skills.slice!(skill_slots..equipped_skills.size)
  100. end
  101. end
  102. end
  103.  
  104. #==============================================================================
  105. # ** Scene_Skill
  106. #------------------------------------------------------------------------------
  107. # This class performs skill screen processing. Skills are handled as items for
  108. # the sake of process sharing.
  109. #==============================================================================
  110.  
  111. class Scene_Skill < Scene_ItemBase
  112. alias qseccw create_command_window
  113. alias qseciw create_item_window
  114. #--------------------------------------------------------------------------
  115. # * Update Method
  116. # ~ Don't really like this, but needed to fix visibility issue.
  117. #--------------------------------------------------------------------------
  118. def update
  119. super
  120. if $imported["Quasi_STypeEquip"] && $imported["Quasi_PassiveEquip"]
  121. update_with_both
  122. elsif $imported["Quasi_PassiveEquip"]
  123. update_with_passive
  124. elsif $imported["Quasi_STypeEquip"]
  125. update_with_stype
  126. else
  127. update_solo
  128. end
  129. end
  130. def update_solo
  131. case @command_window.command_name(@command_window.index)
  132. when Quasi::SkillEquip::NAMESKILL
  133. @skill_equip_window.show if !@skill_equip_window.visible
  134. @item_window.hide if @item_window.visible
  135. else
  136. @item_window.show if !@item_window.visible
  137. @skill_equip_window.hide if @skill_equip_window.visible
  138. end
  139. end
  140. def update_with_passive
  141. case @command_window.command_name(@command_window.index)
  142. when Quasi::SkillEquip::NAMESKILL
  143. @skill_equip_window.show if !@skill_equip_window.visible
  144. @item_window.hide if @item_window.visible
  145. @passive_window.hide if @passive_window.visible
  146. when Quasi::PassiveEquip::NAMEPASSIVE
  147. @passive_window.show if !@passive_window.visible
  148. @skill_equip_window.hide if @skill_equip_window.visible
  149. @item_window.hide if @item_window.visible
  150. else
  151. @item_window.show if !@item_window.visible
  152. @passive_window.hide if @passive_window.visible
  153. @skill_equip_window.hide if @skill_equip_window.visible
  154. end
  155. end
  156. def update_with_stype
  157. case @command_window.command_name(@command_window.index)
  158. when Quasi::SkillEquip::NAMESKILL
  159. @skill_equip_window.show if !@skill_equip_window.visible
  160. @item_window.hide if @item_window.visible
  161. @stype_window.hide if @stype_window.visible
  162. when Quasi::STypeEquip::NAME
  163. @stype_window.show if !@stype_window.visible
  164. @skill_equip_window.hide if @skill_equip_window.visible
  165. @item_window.hide if @item_window.visible
  166. else
  167. @item_window.show if !@item_window.visible
  168. @stype_window.hide if @stype_window.visible
  169. @skill_equip_window.hide if @skill_equip_window.visible
  170. end
  171. end
  172. def update_with_both
  173. case @command_window.command_name(@command_window.index)
  174. when Quasi::SkillEquip::NAMESKILL
  175. @skill_equip_window.show if !@skill_equip_window.visible
  176. @item_window.hide if @item_window.visible
  177. @stype_window.hide if @stype_window.visible
  178. @passive_window.hide if @passive_window.visible
  179. when Quasi::STypeEquip::NAME
  180. @stype_window.show if !@stype_window.visible
  181. @skill_equip_window.hide if @skill_equip_window.visible
  182. @item_window.hide if @item_window.visible
  183. @passive_window.hide if @passive_window.visible
  184. when Quasi::PassiveEquip::NAMEPASSIVE
  185. @passive_window.show if !@passive_window.visible
  186. @skill_equip_window.hide if @skill_equip_window.visible
  187. @stype_window.hide if @stype_window.visible
  188. @item_window.hide if @item_window.visible
  189. else
  190. @item_window.show if !@item_window.visible
  191. @passive_window.hide if @passive_window.visible
  192. @stype_window.hide if @stype_window.visible
  193. @skill_equip_window.hide if @skill_equip_window.visible
  194. end
  195. return
  196. end
  197. #--------------------------------------------------------------------------
  198. # * Create Command Window
  199. # ** ALIAS **
  200. #--------------------------------------------------------------------------
  201. def create_command_window
  202. qseccw
  203. @command_window.set_handler(:sequip, method(:command_sequip))
  204. end
  205. #--------------------------------------------------------------------------
  206. # * Create Skill type Window
  207. # ** ALIAS **
  208. #--------------------------------------------------------------------------
  209. def create_item_window
  210. qseciw
  211. create_skill_equip_window
  212. end
  213. #--------------------------------------------------------------------------
  214. # * Create Skill Equip Window
  215. # ** NEW **
  216. #--------------------------------------------------------------------------
  217. def create_skill_equip_window
  218. wx = @item_window.x
  219. wy = @item_window.y
  220. ww = @item_window.width
  221. wh = @item_window.height
  222. @skill_equip_window = Window_SkillEquip.new(wx, wy, ww, wh)
  223. @skill_equip_window.actor = @actor
  224. @skill_equip_window.viewport = @viewport
  225. @skill_equip_window.help_window = @help_window
  226. @skill_equip_window.set_handler(:ok, method(:on_sequip_ok))
  227. @skill_equip_window.set_handler(:cancel, method(:on_sequip_cancel))
  228. end
  229. #--------------------------------------------------------------------------
  230. # * Passive Command
  231. # ** NEW **
  232. #--------------------------------------------------------------------------
  233. def command_sequip
  234. @skill_equip_window.activate
  235. @skill_equip_window.select(0)
  236. end
  237. #--------------------------------------------------------------------------
  238. # * Passive [OK]
  239. # ** NEW **
  240. #--------------------------------------------------------------------------
  241. def on_sequip_ok
  242. if @skill_equip_window.item
  243. if @actor.equipped_skills.include?(@skill_equip_window.item.id)
  244. Sound.play_ok
  245. @actor.equipped_skills.delete(@skill_equip_window.item.id)
  246. else
  247. if @actor.equipped_skills.size >= @actor.skill_slots
  248. Sound.play_buzzer
  249. else
  250. Sound.play_ok
  251. @actor.equipped_skills.push(@skill_equip_window.item.id)
  252. end
  253. end
  254. end
  255. @status_window.refresh
  256. @skill_equip_window.refresh
  257. @skill_equip_window.activate
  258. end
  259. #--------------------------------------------------------------------------
  260. # * Passive [Cancel]
  261. # ** NEW **
  262. #--------------------------------------------------------------------------
  263. def on_sequip_cancel
  264. @skill_equip_window.unselect
  265. @command_window.activate
  266. end
  267. end
  268.  
  269.  
  270. #==============================================================================
  271. # ** Window_SkillCommand
  272. #------------------------------------------------------------------------------
  273. # This window is for selecting commands (special attacks, magic, etc.) on the
  274. # skill screen.
  275. #==============================================================================
  276. class Window_SkillCommand < Window_Command
  277. alias qesmcl make_command_list
  278. #--------------------------------------------------------------------------
  279. # * Create Command List
  280. # ** REWRITE **
  281. #--------------------------------------------------------------------------
  282. def make_command_list
  283. add_command(Quasi::SkillEquip::NAMESKILL, :sequip, true)
  284. qesmcl
  285. end
  286. end
  287.  
  288. #==============================================================================
  289. # ** Window_SkillEquip (NEW)
  290. #------------------------------------------------------------------------------
  291. # This window is for displaying a list of skills the player can equip.
  292. #==============================================================================
  293.  
  294. class Window_SkillEquip < Window_Selectable
  295. #--------------------------------------------------------------------------
  296. # * Object Initialization
  297. #--------------------------------------------------------------------------
  298. def initialize(x, y, width, height)
  299. super
  300. @actor = nil
  301. @data = []
  302. end
  303. #--------------------------------------------------------------------------
  304. # * Set Actor
  305. #--------------------------------------------------------------------------
  306. def actor=(actor)
  307. return if @actor == actor
  308. @actor = actor
  309. refresh
  310. self.oy = 0
  311. end
  312. #--------------------------------------------------------------------------
  313. # * Get Digit Count
  314. #--------------------------------------------------------------------------
  315. def col_max
  316. return 2
  317. end
  318. #--------------------------------------------------------------------------
  319. # * Get Number of Items
  320. #--------------------------------------------------------------------------
  321. def item_max
  322. @data ? @data.size : 1
  323. end
  324. #--------------------------------------------------------------------------
  325. # * Get Skill
  326. #--------------------------------------------------------------------------
  327. def item
  328. @data && index >= 0 ? @data[index] : nil
  329. end
  330. #--------------------------------------------------------------------------
  331. # * Processing When OK Button Is Pressed
  332. #--------------------------------------------------------------------------
  333. def process_ok
  334. Input.update
  335. deactivate
  336. call_ok_handler
  337. end
  338. #--------------------------------------------------------------------------
  339. # * Restore Previous Selection Position
  340. #--------------------------------------------------------------------------
  341. def select_last
  342. end
  343. #--------------------------------------------------------------------------
  344. # * Create Skill List
  345. #--------------------------------------------------------------------------
  346. def make_item_list
  347. return if !@actor
  348. @data = []
  349. @actor.skills.each do |skill|
  350. if $imported["Quasi_Passive"] && $imported["Quasi_Fixed_Passive"]
  351. next if skill.passive || skill.quasi_passive
  352. elsif $imported["Quasi_Passive"]
  353. next if skill.passive
  354. elsif $imported["Quasi_Fixed_Passive"]
  355. next if skill.quasi_passive
  356. end
  357. @data.push(skill)
  358. end
  359. end
  360. #--------------------------------------------------------------------------
  361. # * Draw Item
  362. #--------------------------------------------------------------------------
  363. def draw_item(index)
  364. skill = @data[index]
  365. if skill
  366. rect = item_rect(index)
  367. rect.width -= 4
  368. enable = @actor.equipped_skills.include?(skill.id)
  369. draw_item_name(skill, rect.x, rect.y, enable)
  370. end
  371. end
  372. #--------------------------------------------------------------------------
  373. # * Update Help Text
  374. #--------------------------------------------------------------------------
  375. def update_help
  376. text = item ? item.description : ""
  377. pl = @actor.equipped_skills.size
  378. pt = @actor.skill_slots
  379. text += "\n#{Quasi::SkillEquip::HELP}: #{pl}/#{pt}"
  380. @help_window.set_text(text)
  381. end
  382. #--------------------------------------------------------------------------
  383. # * Refresh
  384. #--------------------------------------------------------------------------
  385. def refresh
  386. make_item_list
  387. create_contents
  388. draw_all_items
  389. end
  390. end
  391.  
  392. #==============================================================================
  393. # ** Window_SkillList
  394. #------------------------------------------------------------------------------
  395. # This window is for displaying a list of available skills on the skill window.
  396. #==============================================================================
  397.  
  398. class Window_SkillList < Window_Selectable
  399. #--------------------------------------------------------------------------
  400. # * Include in Skill List?
  401. # ** OVERWRITE **
  402. # Hides skills unless they are equipped
  403. #--------------------------------------------------------------------------
  404. def include?(item)
  405. item && item.stype_id == @stype_id && @actor.equipped_skills.include?(item.id)
  406. end
  407. end
  408.  
  409. #==============================================================================
  410. # ** RPG::BaseItem
  411. #==============================================================================
  412. class RPG::BaseItem
  413. def skill_slots
  414. if @skill_slots.nil?
  415. if @note =~ /<(?:skill_slots):(.*)>/i
  416. @skill_slots = $1.to_i
  417. else
  418. @skill_slots = 0
  419. end
  420. end
  421. @skill_slots
  422. end
  423. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement